package com.hspedu.houserent.service;

import com.hspedu.houserent.model.House;

/**
 * 业务层
 * 定义House[] ，保存House对象
 * 1.响应HouseView的调用
 * 2.完成对房屋信息的各种操作（增删改查crud）
 */
public class HouseService {
    private House[] houses;//保存House对象
    private int houseNums = 1;//记录当前有多少个房屋信息
    private int idCounter ;//记录当前的id增长到哪个值
    public HouseService(int size){
        //新建houses对象
        houses = new House[size];
        //为了配合测试列表信息，这里初始化一个House对象
        houses[0] = new House(1, "jackie", 112,"重庆市南岸区",2000,"未出租");
    }

    //add方法，添加新对象，返回boolean
    public boolean add(House newHouse){
        //判断是否还可以继续添加（暂时不考虑数组扩容问题）
        if (houseNums == houses.length){
            System.out.println("数组已经满了，不能再添加了。。。");
            return false;
        }
        //把newHouse对象加入到
        houses[houseNums++] = newHouse;
        //程序员需要设计一个自增长的机制，然后更新new House的id
        newHouse.setId(++idCounter);
        return true;
    }

    //修改方法
    public boolean edit(House editHouse){
        //先找到该房屋的id对应的下标
        int index = -1;//把定义下标值为-1，是为了不与其他值撞车
        for (int i = 0; i < houseNums; i++) {
            if (houses[i].getId()==editHouse.getId()){
                index = i;//使用index记录该下标
            }
        }
        if (index == -1){
            return false;//没有找到这个id
        }else{
            houses[index] = editHouse;
        }
        return true;
    }

    public boolean del(int delId){
        //应当要先找到要删除的房屋信息对应的下标
        int index = -1;
        for (int i = 0; i < houseNums; i++) {
            if (delId == houses[i].getId()){//要删除的房屋id，是数组下标为i的元素
                index = i;//使用index记录i
            }
        }
        if (index ==-1){//说明delId在数组中不存在
            return false;
        }
        //如果找到,就将该下标之后的值往前移动1位，就相当于把这一位数据删除
        for (int i = index; i < houseNums - 1; i++) {
            houses[i] = houses[i+1];
        }
        houses[--houseNums] = null;//把当前存在的房屋信息的最后一个设置位null
        return true;

    }

    //查找方法
    public boolean find(int id){
        //先找到该房屋的id对应的下标
        int index = -1;//把定义下标值为-1，是为了不与其他值撞车
        for (int i = 0; i < houseNums; i++) {
            if (houses[i].getId()==id){
                index = i;//使用index记录该下标
            }
        }
        if (index == -1){
            return false;//这个id在数组中不存在
        }
        //如果找到了，就将该下标的值打印出来
        System.out.println(houses[index]);
        return true;
    }



    //list方法，返回houses
    public House[] list(){
        return houses;
    }
}
